import os
import time
import subprocess

# 设置指定文件夹路径
folder_path = r"D:\User\Desktop\录屏截屏\源文件"

while True:
    # 遍历指定文件夹下的所有文件
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            # 如果是视频文件（后缀是.mp4或.mkv），则进行转码
            if file.endswith(".mp4") or file.endswith(".mkv"):
                # 获取原始文件路径和已转码文件路径
                original_file_path = os.path.join(root, file)
                converted_file_path = os.path.join(root, "转码后", file.split(".")[0] + ".mp4")
                source_file_path = os.path.join(root, "源文件", file)

                # 调用命令行执行ffmpeg转码命令
                cmd = ['ffmpeg.exe', '-i', original_file_path, '-c:v', 'libx264', '-crf', '23', converted_file_path]

                # 使用subprocess启动命令行窗口执行ffmpeg命令，并通过stdout输出进度
                p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
                for line in iter(p.stdout.readline, ''):
                    if line.rstrip() != '':
                        print(line.decode('utf-8').rstrip())

                # 关闭命令行窗口
                p.stdout.close()
                p.wait()

                # 移动原始文件到源文件夹
                os.rename(original_file_path, source_file_path)

                print("{} 转码完成".format(original_file_path))

    # 等待5分钟后再次检查有没有视频文件
    time.sleep(300)